마커 기반 정밀 착륙을 위한 오픈소스 드론 시스템 기술 보고서

마커 기반 정밀 착륙을 위한 오픈소스 드론 시스템 기술 보고서

1. 서론: 비전 기반 정밀 착륙의 개요

1.1 UAV 운용의 “마지막 1미터” 문제

무인 항공기(Unmanned Aerial Vehicle, UAV)의 완전 자율화에 있어 정밀 착륙은 핵심적인 기술 과제 중 하나이다. 일반적인 GPS(Global Positioning System)는 수 미터 수준의 오차를 가지므로, 충전 패드, 도킹 스테이션, 혹은 이동 플랫폼과 같은 특정 지점에 정확히 착륙하는 임무에는 부적합하다.1 이처럼 GPS의 정확도 한계와 주변 환경 요인으로 인해 보조 장치 없는 착륙이 불안정하고 위험해지는 문제를 “마지막 1미터(the last meter)” 문제라 칭한다. 이 문제를 해결하는 것은 드론의 지속적인 임무 수행과 완전 자동화를 위해 필수적이다.

1.2 기준 마커: 저비용 고정밀 솔루션

기준 마커(Fiducial Marker)는 컴퓨터 비전 시스템이 쉽고 강건하게 탐지할 수 있도록 설계된 인공적인 시각 표식이다.2 이 기술의 핵심 원리는, 단일 이미지(monocular vision) 내에서 3차원 공간상의 알려진 참조점을 제공하여 카메라의 6자유도(6-DOF: Degrees of Freedom) 자세(위치 및 방향)를 추정하는 것이다.2 이는 IR 비콘(Infrared Beacon)이나 마커 없는 시각적 매칭(markerless visual matching) 같은 다른 기술들과 비교

했을 때, 저비용으로 구현 가능하고 착륙 목표물에 별도의 전력이 필요 없는 수동적(passive) 방식으로 작동하며, 마커 자체에 고유 ID를 인코딩하여 여러 착륙 지점을 구분할 수 있다는 장점을 가진다.4

1.3 핵심 시스템 아키텍처

오픈소스 기반의 정밀 착륙 시스템은 일반적으로 세 가지 핵심 구성 요소로 이루어진다.

  1. 비행 컨트롤러 (Flight Control Unit, FCU): 드론의 실시간 비행 안정성을 책임지고 상위 명령을 수행하는 ‘두뇌’ 역할을 한다. Pixhawk 보드에서 실행되는 PX4나 ArduPilot 펌웨어가 대표적이다.8

  2. 컴패니언 컴퓨터 (Companion Computer): Raspberry Pi나 Jetson Nano와 같이 고수준 운영체제(Linux)를 탑재한 온보드 컴퓨터로, 이미지 처리와 같은 계산 집약적인 작업을 비실시간으로 수행한다.11

  3. 비전 시스템 (Vision System): 컴패니언 컴퓨터에 연결된 카메라로, 기준 마커를 탐지하는 주 센서 역할을 한다.5

이 시스템의 기본적인 데이터 흐름은 다음과 같다: 카메라가 이미지를 촬영하면, 컴패니언 컴퓨터가 마커를 탐지하고 자세를 추정한다. 이 자세 정보는 MAVLink 프로토콜을 통해 FCU로 전송되며, FCU는 이 정보를 바탕으로 드론의 제어 값을 수정하여 착륙 지점으로 정밀하게 유도한다.

이러한 아키텍처의 보편화는 저비용 고성능 단일 보드 컴퓨터(Single-Board Computer, SBC)의 등장이 결정적인 역할을 했다. 초기의 정밀 착륙 시스템은 FCU의 제한된 연산 능력으로 인해 IR 비콘과 같이 계산 부하가 적은 센서에 의존했다.7 마커 탐지 및 자세 추정은 마이크로컨트롤러 기반의 FCU가 실시간으로 처리하기에는 과도한 부동소수점 연산과 메모리를 요구하기 때문이다.15 Raspberry Pi와 같은 강력한 컴패니언 컴퓨터의 등장은 새로운 아키텍처 패러다임을 제시했다. 즉, 계산량이 많은 비전 처리 작업을 실시간 FCU에서 분리하여 비실시간 리눅스 환경으로 오프로딩하는 것이다.12 이러한 역할 분담을 통해 FCU는 비행 안정성이라는 핵심 임무에 집중하고, 컴패니언 컴퓨터는 복잡한 인식 작업을 전담하게 되었다. 이 구조적 혁신이야말로 AprilTag나 칼만 필터와 같은 정교한 기술을 취미 개발자나 연구자 커뮤니티가 쉽게 활용할 수 있게 만든 핵심 동력이다.

2. 기준 마커 시스템 비교 분석

2.1 사각형 기준 마커의 기본 원리

사각형 기반 기준 마커의 작동 원리는 컴퓨터 비전의 PnP(Perspective-n-Point) 문제 해결에 기반한다. 마커의 네 꼭짓점은 2D 이미지 평면과 3D 월드 좌표계 사이의 대응점을 제공하며, 이를 통해 카메라와 마커 간의 상대적인 위치와 방향을 정확하게 추정할 수 있다.16 마커 내부에 인코딩된 흑백의 이진 패턴은 고유 식별자(ID) 역할을 하며, 오류 검출 코드를 포함하여 잘못된 마커를 인식할 확률(false positive)을 크게 낮춘다.4

2.2 ArUco 대 AprilTag 심층 비교

오픈소스 드론 커뮤니티에서는 ArUco와 AprilTag가 사실상의 표준으로 사용되고 있다.

  • ArUco (Adaptive Thresholding followed by Contour Finding):

2014년에 개발된 ArUco는 빠른 처리 속도와 사용자 정의 딕셔너리 생성의 유연성으로 잘 알려져 있다.3 탐지 알고리즘은 이미지에 적응형 스레시홀딩을 적용하여 이진화한 후, 윤곽선(contour)을 찾아 사각형 후보를 식별하는 방식으로 작동하며, 이는 OpenCV 라이브러리에 기본적으로 포함되어 있어 접근성이 높다.19 성능 면에서는 일반적으로 AprilTag보다 빠른 처리 속도(높은 FPS)를 보이지만, 원거리에서의 정밀도가 다소 떨어지거나 위치 추정값에 미세한 떨림(jitter)이 발생할 수 있다는 평가가 있다.3 반면, 특정 실내 환경 테스트에서는 높은 신뢰성을 보인 연구 결과도 존재한다.22

  • AprilTag (Gradient-based Quad Detection):

AprilTag는 이미지의 그래디언트(gradient) 정보를 활용하여 선분들을 군집화하고, 이를 통해 사각형 후보를 찾는 더 정교한 알고리즘을 사용한다. 이 방식은 조명 변화나 그림자에 더 강건한 성능을 보인다.23 성능 면에서는 ArUco보다 처리 속도가 다소 느리지만(낮은 FPS), 특히 원거리나 카메라가 비스듬한 각도에서 마커를 바라볼 때 더 낮은 오탐지율과 높은 정확도를 제공한다.4 특히 AprilTag 2 및 3 버전으로 업데이트되면서 효율성과 강건성이 크게 향상되었다.23

이 외에도 ARTag, CCTag, WhyCode 등 다양한 마커 시스템이 존재하지만, 현재 오픈소스 드론 분야에서는 ArUco와 AprilTag가 가장 널리 채택되고 있다.3

2.3 마커 선택 및 설계를 위한 실용적 고려사항

  • 딕셔너리 선택: 마커 딕셔너리 선택은 탐지 거리와 ID 개수 사이의 트레이드오프 관계를 가진다. 예를 들어, 4x4 그리드(e.g., AprilTag 16h5)는 내부 비트(셀)의 크기가 커서 고고도에서 탐지하기 용이한 반면, 6x6 그리드(e.g., AprilTag 36h11)는 더 많은 고유 ID를 제공하지만 탐지를 위해 더 높은 이미지 해상도를 요구한다.5

  • 물리적 크기: 마커의 탐지 가능 거리는 인쇄된 마커의 물리적 크기에 정비례한다. 높은 고도에서 착륙 절차를 시작하려면 더 큰 크기의 마커가 필수적이다.2

  • 다중 마커 전략: 넓은 범위의 고도에서 안정적인 탐지를 위해 중첩된 마커(큰 마커 안에 작은 마커를 배치)나 마커 배열(bundle)을 사용하는 전략이 효과적이다.5 시스템은 원거리에서는 가장 크게 보이는 마커에 고정(lock-on)하고, 하강하면서 점차 중앙의 작은 마커로 대상을 전환하여 최종 착륙 정밀도를 높일 수 있다.

전통적인 컴퓨터 비전 기반의 마커 탐지 기술이 주류를 이루고 있지만, 최근에는 딥러닝 모델을 활용하려는 새로운 흐름이 나타나고 있다. ArUco나 AprilTag와 같은 알고리즘은 모션 블러, 저해상도, 열악한 조명과 같은 실제 드론 운용 환경에서 흔히 발생하는 문제 상황에서 성능이 저하된다.27 이에 대한 해결책으로, 이미지를 탐지기에 입력하기 전에 디블러링 네트워크(DeblurGAN)로 전처리하거나 27, YOLO와 같은 객체 탐지 모델을 사용하여 마커를 직접 찾는 연구가 제안되고 있다.30 이는 알고리즘적 접근 방식의 성능 한계를 보여주며, 딥러닝이 이러한 까다로운 조건에 불변하는 강건한 특징을 학습할 수 있는 대안임을 시사한다.30 하지만 이는 상당한 계산 부하를 동반한다. 일반적인 Raspberry Pi는 YOLO 모델과 디블러링 네트워크를 실시간으로 처리하기 어려울 수 있으며, 이는 향후 Jetson 시리즈와 같이 더 강력한 컴패니언 컴퓨터가 이러한 고성능 알고리즘을 활용하기 위해 필수적이 될 것임을 암시한다.

또한, 마커 시스템의 선택은 단순히 소프트웨어적인 결정이 아니라 비전 시스템의 물리적, 광학적 특성과 깊이 연관되어 있다. vision_landing 프로젝트의 문서에서는 고고도 성능을 위해 AprilTag 16h5와 같이 셀이 큰 딕셔너리를 사용할 것을 권장한다.18 연구에 따르면 탐지 성능은 마커가 이미지에서 차지하는 픽셀 수에 의해 제한된다.31 이는 마커의 물리적 크기, 카메라 해상도, 그리고 카메라의 화각(Field of View, FOV)이 서로 긴밀하게 연결된 시스템을 이룬다는 것을 의미한다. 광각 렌즈는 넓은 영역을 볼 수 있지만 마커를 더 작게(적은 픽셀 수) 보이게 하여 최대 탐지 고도를 감소시킨다. 반면, 망원 렌즈는 그 반대의 효과를 가진다.2 따라서 최적의 시스템은 광각 카메라(탐색용)와 망원 카메라(최종 접근용)를 함께 사용하거나, 다중 마커 배열을 활용해야 할 수 있다. 단일 마커와 카메라 조합만으로는 비행의 모든 단계에서 최적의 성능을 발휘하기 어렵기 때문이다.2

2.4 요약 및 권장사항

다음 표는 ArUco와 AprilTag 시스템의 주요 특성을 요약하여 사용자가 프로젝트 요구사항에 맞는 최적의 마커를 선택하는 데 도움을 준다.

특성ArUcoAprilTag 2/3
탐지 원리적응형 스레시홀딩, 윤곽선 찾기그래디언트 기반 군집화, 선분 피팅
상대적 속도 (FPS)높음 (빠름) 3낮음 (느림) 21
정확도/정밀도양호하나 원거리에서 저하 가능 21높음, 특히 원거리 및 비스듬한 각도에서 우수 4
조명 강건성보통높음 23
가려짐(Occlusion) 강건성낮음중간 (AprilTag 1 대비 향상됨) 23
오탐지율AprilTag 대비 상대적으로 높음 21매우 낮음 21
계산 비용낮음중간
주요 사용 사례속도가 중요하고 계산 자원이 제한된 실내 환경높은 정확도와 신뢰성이 요구되는 실외 및 원거리 환경

3. 시스템 아키텍처와 데이터 흐름

3.1 하드웨어 통합

  • FCU와 컴패니언 컴퓨터 연결: Pixhawk 계열 FCU의 텔레메트리 포트(일반적으로 TELEM2)와 Raspberry Pi의 GPIO UART 핀(TX, RX, GND)을 연결하는 것이 표준적인 방식이다. FCU의 TX는 Pi의 RX에, FCU의 RX는 Pi의 TX에 교차 연결해야 한다.11

  • 전원 관리: FCU와 컴패니언 컴퓨터에 각각 독립적이고 안정적인 전원을 공급하는 것은 매우 중요하다. 컴패니언 컴퓨터나 연결된 주변 장치(카메라 등)가 FCU와 동일한 전원 레귤레이터를 공유할 경우, 순간적인 전력 소모 급증으로 인한 전압 강하(brownout)가 발생하여 FCU가 재부팅되거나 오작동을 일으켜 치명적인 추락으로 이어질 수 있다.11

  • 직렬 포트 설정: 양쪽 장치에서 직렬 통신을 위한 설정이 필요하다. FCU 측에서는 해당 텔레메트리 포트의 프로토콜을 MAVLink 2로 설정하고 통신 속도(baud rate)를 지정해야 한다(예: 921600). Raspberry Pi 측에서는 운영체제의 직렬 콘솔 기능을 비활성화하여 해당 UART 포트를 MAVLink 통신 전용으로 확보해야 한다.12

3.2 MAVLink 프로토콜: 시스템 간의 교량

MAVLink는 FCU, 컴패니언 컴퓨터, 지상국(Ground Control Station, GCS) 간의 통신을 위한 표준 메시징 프로토콜이다.33 비전 기반 정밀 착륙에서는

LANDING_TARGET (메시지 ID: 149) 메시지가 핵심적인 역할을 수행한다.35 이 메시지는 컴패니언 컴퓨터가 계산한 착륙 목표물의 상대 위치 정보를 FCU에 전달하는 통로이다.

LANDING_TARGET 메시지는 MAVLink 버전에 따라 두 가지 방식으로 활용될 수 있다.

  • MAVLink 1 필드 (각도 기반): 초기 버전은 angle_x, angle_y (카메라 중심으로부터 목표물까지의 수평/수직 각도 오프셋, 단위: 라디안)와 distance (카메라로부터 목표물까지의 거리) 필드를 사용한다. 이 방식은 구현이 비교적 간단하지만, FCU가 드론의 고도 정보를 함께 활용해야만 목표물의 지상 좌표를 계산할 수 있다.36

  • MAVLink 2 필드 (위치 기반): MAVLink 2에서는 x, y, z (특정 좌표계 기준 목표물의 3차원 위치 벡터), frame (좌표계 지정, 예: MAV_FRAME_BODY_FRD), 그리고 position_valid 플래그가 추가되었다. 이 방식은 컴패니언 컴퓨터가 계산한 3차원 위치 벡터를 FCU에 직접 전달하므로 더 직관적이고 강건하다.36

LANDING_TARGET 메시지의 진화 과정은 컴패니언 컴퓨터의 성능 향상과 자율 비행 로직의 분산화 경향을 명확히 보여준다. MAVLink 1의 각도 기반 메시지는 FCU가 여전히 상태 추정의 상당 부분(각도 정보와 자체 고도 정보를 융합하여 목표물의 지상 위치 계산)을 책임져야 함을 시사한다.36 이는 상대적으로 단순한 컴패니언 시스템에 적합한 방식이다. 반면, MAVLink 2에서 추가된 3차원 위치 벡터 필드는 비전 시스템으로부터 완전한 자세 정보를 가진 컴패니언 컴퓨터가 FCU에게 훨씬 풍부하고 직접적인 제어 정보를 전달할 수 있게 한다.36 이러한 변화는 자세 추정 로직의 중심을 FCU에서 컴패니언 컴퓨터로 이동시킨다. FCU의 역할은 전달받은 위치 오차 벡터를 단순히 0으로 만드는 수동적인 실행기(actuator)에 가까워진다. 이러한 아키텍처는 개발자가 FCU의 실시간 비행 코드를 수정하지 않고도 이동 표적 착륙과 같은 복잡한 행동을 전적으로 컴패니언 컴퓨터에서 구현할 수 있게 하여, 개발 및 실험 속도를 획기적으로 단축시킨다.

필드명데이터 타입단위설명MAVLink 버전주요 사용 오토파일럿
time_usecuint64_tμs데이터 처리 시점의 타임스탬프1공통
angle_xfloatrad이미지 중심에서 목표물까지의 X축 각도 오프셋1ArduPilot (대안)
angle_yfloatrad이미지 중심에서 목표물까지의 Y축 각도 오프셋1ArduPilot (대안)
distancefloatm기체로부터 목표물까지의 거리1ArduPilot (필수)
xfloatm지정된 frame 기준 목표물의 X축 위치2PX4, ArduPilot
yfloatm지정된 frame 기준 목표물의 Y축 위치2PX4, ArduPilot
zfloatm지정된 frame 기준 목표물의 Z축 위치2PX4, ArduPilot
frameuint8_tenumx, y, z 필드가 사용하는 좌표계 (MAV_FRAME_*)2PX4, ArduPilot
position_validuint8_tboolx, y, z 필드의 유효성 여부 (1: 유효, 0: 무효)2PX4, ArduPilot

3.3 종단간(End-to-End) 데이터 흐름

마커 기반 정밀 착륙 시스템의 전체 데이터 흐름은 다음과 같이 요약할 수 있다.

  1. 이미지 캡처: 카메라가 이미지 프레임을 캡처한다.

  2. 마커 탐지 및 자세 추정: 컴패니언 컴퓨터의 OpenCV와 같은 비전 라이브러리가 이미지 내에서 마커를 탐지하고, 카메라 좌표계 기준으로 마커의 6자유도 자세를 계산한다.

  3. 좌표계 변환: 계산된 자세는 카메라 좌표계에서 드론의 동체(body) 좌표계(일반적으로 FRD: Forward, Right, Down)로 변환된다. 이 과정은 카메라의 물리적 장착 위치와 방향에 대한 정확한 정보를 필요로 하는 매우 중요한 단계이다.38

  4. MAVLink 메시지 생성: 변환된 상대 위치 벡터는 LANDING_TARGET MAVLink 메시지로 패키징된다.

  5. FCU로 전송: 생성된 메시지는 직렬 포트를 통해 FCU로 전송된다.

  6. 비행 제어: FCU의 상태 추정기(EKF)와 위치 제어기는 수신된 LANDING_TARGET 정보를 사용하여 드론의 목표 위치(setpoint)를 지속적으로 갱신하고, 목표물을 향해 기체를 정밀하게 유도한다.

4. PX4 오토파일럿 기반 구현

4.1 PX4의 내장 정밀 착륙 상태 머신

PX4 펌웨어는 Commander 모듈 내에 정밀 착륙을 위한 3단계 상태 머신(state machine)을 내장하고 있다. 이 로직은 외부 비전 시스템의 입력과 무관하게 정해진 절차에 따라 작동한다.7

  1. 수평 접근 (Horizontal Approach): 드론은 현재 고도를 유지한 채 수평으로 이동하여 목표물과의 수평 거리가 PLD_HACC_RAD 파라미터 값 이내로 들어올 때까지 접근한다.

  2. 목표물 상공 하강 (Descent Over Target): 목표물 상공 중앙에 위치를 유지하면서 수직으로 하강한다.

  3. 최종 접근 (Final Approach): 고도가 PLD_FAPPR_ALT 파라미터 값보다 낮아지면 최종 하강을 계속한다. 이 단계에서 목표물을 놓치더라도 착륙을 중단하지 않고 그대로 진행한다.

이 상태 머신은 두 가지 모드로 운영될 수 있다. ‘필수(Required)’ 모드는 착륙 명령 시 목표물이 보이지 않으면 PLD_SRCH_ALT 고도까지 상승하여 탐색을 시도하는 반면, ‘기회적(Opportunistic)’ 모드는 착륙 명령 시점에 이미 목표물이 보일 경우에만 정밀 착륙을 수행한다.7

4.2 외부 비전 입력을 위한 설정

PX4는 외부 시스템으로부터 LANDING_TARGET MAVLink 메시지를 수신하는 것 자체를 목표물이 ‘보이는’ 상태로 간주한다.41 ArduPilot과 달리, MAVLink 기반 정밀 착륙을 활성화하는 별도의 파라미터는 없다. 대신, 정밀 착륙 비행 모드가 활성화된 상태에서

LANDING_TARGET 메시지가 수신되면 시스템이 자동으로 정밀 착륙 로직을 사용한다. 이때 PX4는 MAVLink 2의 위치 기반 필드(x, y, z)를 사용하며, 좌표계는 MAV_FRAME_LOCAL_NED(North-East-Down)를 기준으로 한다.36

정밀 착륙은 세 가지 주요 방법으로 시작할 수 있다.

  1. 미션(Mission) 수행: 미션 계획 시 MAV_CMD_NAV_LAND 명령의 param2를 2(‘Required’ 모드)로 설정한다.

  2. 자동 복귀(Return-to-Launch, RTL) 모드: RTL_PLD_MD 파라미터를 2로 설정하면 RTL의 마지막 단계에서 정밀 착륙을 시도한다.

  3. 직접 모드 변경: MAVLink 명령을 통해 비행 모드를 auto:precland로 직접 변경한다.40

4.3 PX4 핵심 파라미터 튜닝

PX4에서 정밀 착륙 성능을 최적화하기 위해서는 여러 파라미터를 신중하게 튜닝해야 한다. 이 파라미터들은 착륙 행동의 세부 사항을 제어한다.7

파라미터명설명기본값튜닝 권장사항
RTL_PLD_MDRTL 모드에서의 정밀 착륙 동작 방식 (0: 비활성화, 1: 기회적, 2: 필수)0자동 복귀 시 정밀 착륙을 사용하려면 2로 설정한다.
PLD_HACC_RAD수평 접근을 마치고 수직 하강을 시작하는 반경 (단위: m)0.2기체의 위치 제어 정밀도에 따라 조정한다. 값이 너무 작으면 목표물 상공을 맴돌 수 있다.
PLD_BTOUT목표물을 놓쳤다고 판단하는 시간 (단위: s)5.0비전 시스템의 탐지 주기가 느리거나 간헐적일 경우 값을 늘려준다.
PLD_FAPPR_ALT최종 접근 단계로 전환되는 고도 (단위: m)0.1지면 효과나 센서 오차를 고려하여 설정한다. 너무 높으면 최종 정밀도가 떨어진다.
PLD_SRCH_ALT‘필수’ 모드에서 목표물 탐색을 위해 상승하는 고도 (단위: m)3.0마커가 확실히 보일 수 있는 충분한 고도로 설정한다.
PLD_SRCH_TOUT탐색 고도에서 목표물을 기다리는 최대 시간 (단위: s)20.0탐색 영역의 크기와 기체 속도를 고려하여 설정한다.
LTEST_MODE착륙 목표물이 고정(1)인지 이동(0)인지 설정0고정된 착륙 패드에 착륙할 경우 반드시 1로 설정해야 한다.
EKF2_EV_CTRLEKF2 상태 추정기에 외부 비전 데이터 융합 방식을 설정하는 비트마스크-정밀 착륙의 안정성을 높이기 위해 수평 위치(horizontal position) 융합을 활성화하는 것이 좋다.

PX4에서 비전 기반 정밀 착륙을 구현할 때, 특히 GPS 신호가 없는 실내 환경에서는 중대한 난관에 부딪힐 수 있다. PX4의 공식 문서는 정밀 착륙이 유효한 전역 위치(global position) 정보가 있을 때만 가능하다고 명시하고 있다.40 이는 PX4의 위치 제어기가 내부적으로 전역 좌표계에 강하게 의존하고 있음을 보여준다. 한 개발자는 GitHub 이슈를 통해 GPS 없이 이 기능을 구현하려다 겪은 어려움을 상세히 기술했다.42 그는 비전 시스템으로부터 얻은 지역 NED 좌표계 정보만으로는 위치 제어 목표값(setpoint)이 비정상적으로 동작하는 문제를 겪었다. 그의 해결책은 지역 좌표를 위도/경도로 변환하는 가상의 GPS 모듈을 만들어 시스템을 ‘속이는’ 것이었으며, 심지어 정밀 착륙 모듈의 핵심 함수 일부를 수정해야 했다. 이는 PX4의 아키텍처가

LANDING_TARGET 메시지를 GPS 기반 비행의 ‘보조’ 수단으로 설계했을 가능성을 시사한다. 따라서 GPS가 없는 환경에서 강건한 정밀 착륙을 구현하기 위해서는, 단순히 LANDING_TARGET 메시지에 의존하기보다 전체적인 시각 관성 주행 거리 측정(Visual-Inertial Odometry, VIO) 시스템을 구축하여 /mavros/odometry/out 또는 /mavros/vision_pose/pose 토픽을 통해 지속적인 위치 정보를 제공하는 것이 더 안정적이고 권장되는 접근 방식이다.39

5. ArduPilot 오토파일럿 기반 구현

5.1 ArduPilot의 정밀 착륙 접근 방식

ArduPilot의 정밀 착륙 기능은 PX4보다 더 유연하고 개방적인 인터페이스를 지향한다. 특정 내장 상태 머신에 의존하기보다, 외부 소스(컴패니언 컴퓨터, IR-LOCK 센서 등)로부터 제공되는 유도 정보를 신뢰하여 비행을 제어하는 방식으로 설계되었다.43 이 기능은

LAND, RTL, Loiter 등 다양한 비행 모드에서 활성화될 수 있다. 본래 IR-LOCK 센서를 위해 개발되었으나, 현재는 MAVLink 메시지를 수신하여 컴패니언 컴퓨터와 연동하는 방식이 널리 사용된다.43

5.2 외부 비전 입력을 위한 설정

ArduPilot에서 컴패니언 컴퓨터를 이용한 정밀 착륙을 설정하는 과정은 명시적이고 직관적이다.

  1. 기능 활성화: PLND_ENABLED 파라미터를 1로 설정하여 정밀 착륙 기능을 활성화한다. 이 파라미터를 변경하고 재부팅하면 관련된 다른 PLND_* 파라미터들이 나타난다.43

  2. 소스 유형 선택: PLND_TYPE 파라미터를 1로 설정한다. 이 설정은 ArduPilot이 정밀 착륙 유도 정보의 소스로 LANDING_TARGET MAVLink 메시지를 사용하도록 명시적으로 지정하는 가장 중요한 단계이다.35

  3. 좌표계: ArduPilot은 각도 기반 및 위치 기반 LANDING_TARGET 메시지를 모두 처리할 수 있다. 위치 기반 메시지를 사용할 경우, 좌표계는 MAV_FRAME_BODY_FRD(Forward-Right-Down)를 기준으로 해야 한다. 이는 PX4가 MAV_FRAME_LOCAL_NED를 사용하는 것과의 핵심적인 차이점이므로 구현 시 반드시 유의해야 한다.36

5.3 ArduPilot 핵심 파라미터 튜닝

ArduPilot의 정밀 착륙 성능은 PLND_* 파라미터 그룹을 통해 세밀하게 조정할 수 있다.43

파라미터명설명기본값튜닝 권장사항
PLND_ENABLED정밀 착륙 기능 활성화 (0: 비활성화, 1: 활성화)0반드시 1로 설정해야 한다.
PLND_TYPE정밀 착륙 소스 유형 (1: MAVLink, 2: IR-LOCK 등)0컴패니언 컴퓨터 사용 시 1로 설정한다.
PLND_STRICT목표물 분실 시 동작 (0: 일반 착륙, 1: 재시도 후 착륙, 2: 재시도 후 호버링)0신뢰성이 중요한 임무에서는 1 또는 2로 설정하여 안전성을 높인다.
PLND_ALT_MAX정밀 착륙 로직이 활성화되는 최대 고도 (단위: m). 이 고도 위에서는 일반 착륙 로직을 따른다.10마커가 안정적으로 탐지되기 시작하는 최대 고도보다 약간 높게 설정한다.
PLND_ALT_MIN목표물 분실 시에도 수직 착륙을 계속하는 최소 고도 (단위: m)00으로 설정하면 고도와 무관하게 PLND_STRICT 로직을 따른다. 지면 근처에서의 안전을 위해 0.5~1m 정도로 설정할 수 있다.
PLND_OPTIONS추가 옵션 비트마스크 (bit 0: 이동 타겟, bit 1: 수동 조작 후 재개 허용)0이동 플랫폼에 착륙할 경우 bit 0을 활성화해야 한다.
PLND_CAM_POS_X/Y/Z기체 중심(CoG) 기준 카메라의 상대 위치 (단위: m)0정확한 위치 추정을 위해 필수적이다. 기체의 앞쪽, 오른쪽, 아래쪽 방향이 양수이다.
PLND_LAND_OFS_X/Y목표물 중심 기준, 최종 착륙 시 카메라가 위치할 지점의 오프셋 (단위: m)0착륙 기어의 위치에 맞춰 카메라가 아닌 기체 중심이 마커 중앙에 오도록 오프셋을 설정할 수 있다.

ArduPilot과 PX4의 정밀 착륙 아키텍처를 비교해 보면 근본적인 철학의 차이를 발견할 수 있다. ArduPilot은 컴패니언 컴퓨터를 더 신뢰하며, 외부 유도 정보를 받아들이는 개방형 인터페이스처럼 작동한다. PLND_TYPE=1 설정은 마치 외부 유도 데이터를 위한 특정 포트를 여는 것과 같다.43 목표물에 어떻게 접근할지에 대한 전략은

LANDING_TARGET 메시지 스트림을 생성하는 컴패니언 컴퓨터에 상당 부분 위임된다. 반면, PX4는 수평 접근, 하강, 최종 접근이라는 3단계의 경직된 상태 머신을 내부적으로 강제한다.40

LANDING_TARGET 메시지는 이 미리 정의된 로직의 ’입력’으로만 작용한다. 즉, 컴패니언 컴퓨터는 목표물의 위치를 제공할 뿐, 착륙 전략 자체는 FCU가 주도한다. 이러한 차이는 실제 구현에서 큰 영향을 미친다. ArduPilot을 사용하면 개발자는 적절한 LANDING_TARGET 메시지 스트림을 생성함으로써 나선형 하강이나 특정 각도로 진입하는 등의 독창적인 착륙 방식을 컴패니언 컴퓨터에서 자유롭게 구현할 수 있다. PX4에서는 이러한 동작을 구현하려면 핵심 비행 코드를 직접 수정해야 하는 제약이 따른다. 따라서 ArduPilot은 연구나 새로운 애플리케이션 개발에 더 큰 유연성을 제공하며, PX4는 표준적인 사용 사례에서 더 예측 가능하고 직관적인 동작을 보장한다고 평가할 수 있다.

6. 컴패니언 컴퓨터 소프트웨어 스택: ROS 기반 접근법

6.1 ROS(Robot Operating System)의 역할

ROS는 로봇 공학 연구 및 개발을 위한 표준 미들웨어로 자리 잡았다. ROS의 핵심 장점은 모듈성(노드), 표준화된 통신 방식(토픽, 서비스), 그리고 방대한 기존 패키지 생태계에 있다. 정밀 착륙 시스템에서 ROS를 사용하면 카메라 드라이버, 마커 탐지, FCU 통신 등 각 기능을 독립적인 ’노드’로 개발하고 조합할 수 있어 시스템의 개발, 디버깅, 재사용이 용이해진다.44

6.2 핵심 ROS 노드와 데이터 흐름

ROS 기반 정밀 착륙 시스템은 일반적으로 다음과 같은 노드들로 구성된다.

  • 이미지 획득 노드: usb_cam이나 raspicam_node와 같은 표준 카메라 드라이버 노드가 카메라로부터 이미지를 획득하여 /image_raw와 같은 토픽으로 발행(publish)한다.14

  • 마커 탐지 노드: apriltag_ros 패키지는 /image_raw 토픽을 구독(subscribe)하여 이미지 내에서 AprilTag를 탐지하고, 그 결과를 tf 토픽과 자세(pose) 토픽으로 발행한다.44 또는, OpenCV의

cv2.aruco.detectMarkers() 함수를 사용하는 커스텀 파이썬 노드를 작성하여 동일한 기능을 수행할 수도 있다.19

  • MAVLink 브리지 (MAVROS): mavros 노드는 ROS 세계와 FCU의 MAVLink 세계를 연결하는 필수적인 다리 역할을 한다.45 이 노드는 특정 ROS 토픽을 구독하여 MAVLink 메시지로 변환하고, FCU로부터 수신한 MAVLink 메시지를 ROS 토픽으로 발행한다. 정밀 착륙을 위해서는, 별도의 스크립트나 노드가 마커 탐지 노드가 발행한 자세 토픽을 구독하고, 필요한 좌표 변환을 거친 후

/mavros/landing_target/raw 토픽으로 발행한다. 그러면 mavros 노드가 이 정보를 받아 LANDING_TARGET MAVLink 메시지를 생성하여 FCU로 전송하는 구조이다.48

6.3 좌표계 변환의 중요성

정밀 착륙 시스템 구현 시 가장 흔하게 발생하는 오류는 좌표계 변환 과정에서 비롯된다. 정확한 변환 파이프라인을 구축하는 것이 시스템 성공의 관건이다.

  1. 태그 → 카메라 좌표계: 이 변환은 estimatePoseSingleMarkers와 같은 마커 탐지 라이브러리 함수가 반환하는 회전 벡터(rvec)와 변환 벡터(tvec)를 통해 얻어진다.

  2. 카메라 → 드론 동체 좌표계(base_link): 카메라가 드론에 장착된 물리적 위치와 방향(예: 아래를 향함, 전방으로 기울어짐)에 따라 정적 변환(static transform)을 적용해야 한다. 이 정보는 보통 ROS의 launch 파일에 정의된다.

  3. 드론 동체 → 월드 좌표계: 최종적으로 mavros가 ROS 표준 좌표계(FLU: Forward, Left, Up)와 오토파일럿 표준 좌표계(NED: North, East, Down 또는 동체 기준 FRD) 간의 변환을 처리한다.38 이 단계에서의 설정 오류는 드론이 예측 불가능한 방향으로 움직이는 ‘플라이어웨이(flyaway)’ 현상의 주된 원인이 된다.

ROS와 MAVROS를 중심으로 한 컴패니언 컴퓨터 스택의 표준화는 자율 비행을 위한 강력한 ’하드웨어 추상화 계층(Hardware Abstraction Layer)’을 형성한다. 이는 시뮬레이션 환경에서 개발된 복잡한 행동 알고리즘을 실제 하드웨어에 최소한의 수정만으로 배포할 수 있게 하여 개발 주기를 획기적으로 단축시킨다. mzahana/mavros_apriltag_tracking과 같은 프로젝트들은 Gazebo 시뮬레이션 환경에서 PX4/ArduPilot의 SITL(Software-in-the-Loop)과 연동하여 개발 및 테스트된다.50 시뮬레이션 환경의 FCU는 가상의 MAVLink 연결을 통해 ROS 노드와 통신하며, ROS 노드들은 실제 FCU와 통신하는지 가상의 FCU와 통신하는지 구분하지 않는다. 마찬가지로, 마커 탐지 노드는

/image_raw 토픽의 이미지가 실제 카메라에서 오는지 가상 카메라에서 오는지 인지할 필요가 없다. 이처럼 컴패니언 컴퓨터의 전체 소프트웨어 스택이 표준화된 인터페이스(ROS 토픽, MAVLink 메시지)를 통해 상호작용하기 때문에, 가장 복잡하고 버그 발생 가능성이 높은 인식 및 제어 로직을 안전하고 반복 가능한 시뮬레이션 환경에서 철저히 디버깅한 후 실제 하드웨어에 적용할 수 있다. 이러한 시뮬레이션 우선(simulation-first) 개발 방식은 현대 로봇 공학 개발의 근간을 이루는 핵심적인 장점이다.

7. 강건성 향상을 위한 고급 기법

7.1 칼만 필터를 이용한 상태 추정

비전 시스템에서 얻는 원시(raw) 자세 데이터는 노이즈가 많아 값이 미세하게 떨리거나(jitter), 모션 블러, 조명 변화, 일시적인 가려짐 등으로 인해 탐지가 간헐적으로 끊길 수 있다.1 이렇게 불안정한 데이터를 FCU에 직접 전송하면 기체의 움직임이 급격하고 불안정해질 수 있다.

이 문제에 대한 효과적인 해결책은 컴패니언 컴퓨터에 칼만 필터(Kalman Filter) 또는 확장 칼만 필터(Extended Kalman Filter, EKF)를 구현하는 것이다. 칼만 필터는 목표물의 상태(위치 및 속도)에 대한 부드럽고 연속적인 추정치를 제공한다.1 필터는 먼저 등속도 모델과 같은 움직임 모델을 기반으로 목표물의 다음 위치를 ’예측’한다. 그 후, 새로운 비전 측정값이 들어오면 예측값과 측정값의 불확실성을 고려하여 가중 평균을 계산하고 상태를 ’갱신’한다. 만약 비전 측정값이 들어오지 않더라도, 필터는 예측 단계만으로 목표물의 위치를 계속 추정하여 데이터의 공백을 메워준다.54

mzahana/mavros_apriltag_tracking 프로젝트의 kf_tracker_node는 이러한 역할을 수행하는 대표적인 예시이다.51

7.2 환경적 제약 극복

  • 조명 및 그림자: 고정된 임계값(threshold) 대신 OpenCV의 적응형 스레시홀딩 기법을 사용하면 다양한 조명 조건에 더 잘 대응할 수 있다. 야간이나 매우 어두운 환경에서는 드론에 LED를 장착하여 능동적으로 조명을 비추거나, IR 마커와 IR 감응 카메라를 사용하는 것이 효과적인 대안이 될 수 있다.4

  • 모션 블러: 빠른 움직임이나 최종 하강 단계에서 발생하는 모션 블러는 탐지 실패의 주된 원인이다.27 이에 대한 해결책은 하드웨어, 소프트웨어, 알고리즘적 접근으로 나눌 수 있다.

  • 하드웨어: 롤링 셔터(rolling shutter) 방식보다 모션 블러에 강한 글로벌 셔터(global shutter) 방식의 카메라를 사용하고, 높은 프레임률(FPS)을 지원하는 카메라를 선택한다.

  • 소프트웨어: 카메라의 노출 시간을 짧게 설정하여 블러를 줄인다. 단, 이 경우 더 많은 광량이 필요하다.

  • 알고리즘: 디블러링 알고리즘을 적용할 수 있으나, 이는 컴패니언 컴퓨터의 계산 부하를 증가시킨다.27

  • 카메라 캘리브레이션: 렌즈 왜곡을 제거하기 위한 카메라 캘리브레이션은 절대적으로 필수적인 과정이다. 정확한 캘리브레이션 없이는 모든 자세 추정값이, 특히 이미지의 가장자리에서, 부정확해진다. 이 과정은 일반적으로 체커보드 패턴을 여러 각도와 거리에서 촬영하여 카메라의 내부 파라미터와 왜곡 계수를 계산하는 방식으로 이루어진다.14

7.3 다중 마커 및 다중 센서 융합

중첩 마커나 마커 배열과 같은 다중 마커 전략은 비행 중 어떤 고도에서도 최소 하나 이상의 마커가 카메라 화각 내 최적의 위치에 있도록 보장하는 효과적인 방법이다.5 컴패니언 컴퓨터는 이미지에서 가장 크게 보이는 마커와 같이 가장 신뢰도 높은 추정치를 제공하는 마커를 지능적으로 선택하고 전환하는 로직을 구현할 수 있다.5

더 나아가, 마커 데이터와 다른 센서 데이터를 융합하여 시스템의 전체적인 정밀도를 향상시킬 수 있다. 예를 들어, 하방 거리 측정 센서(레이저 레인지파인더 또는 LiDAR)를 함께 사용하면 매우 정확한 고도 정보를 얻을 수 있다. 이 고도 정보는 단안 카메라만으로는 정확한 추정이 어려운 스케일(scale) 문제를 해결하여 위치 추정의 정확도를 크게 개선한다.4

진정으로 강건한 정밀 착륙 시스템은 단순한 인식 시스템이 아니라, 상태 추정과 제어가 긴밀하게 통합된 시스템이다. 가장 성공적인 오픈소스 프로젝트들은 이러한 관점에서 시스템을 설계한다. 단순히 마커를 탐지하여 원시 위치 정보를 FCU로 보내는 방식은 이상적인 실험실 환경에서는 작동할 수 있으나, 실제 환경에서는 실패할 가능성이 높다. 강건성은 여러 지능적인 계층을 추가함으로써 확보된다. 첫 번째 계층은 카메라 캘리브레이션, 적응형 스레시홀딩 등 인식 자체의 성능을 향상시키는 것이다.14 두 번째이자 더 중요한 계층은 칼만 필터를 통한 상태 추정이다.50 이는 제어 루프를 센서의 불확실성으로부터 분리하는 역할을 한다. 즉, FCU는 더 이상 모든 노이즈 섞인 비전 업데이트에 민감하게 반응하는 대신, 필터가 생성한 부드러운 궤적을 추종하게 된다. 세 번째 계층은

vision-landing-2의 다중 마커 전환 전략이나 5 FCU의 탐색 및 재시도 로직과 같은 지능형 제어 로직이다.7 이는 목표물을 완전히 놓쳤을 때 대처하는 전략적 의사결정 능력을 시스템에 부여한다. 따라서 단순한 ’탐지기’에서 완전한 ’추적 및 추정기’로의 발전이야말로 이러한 시스템 개발의 핵심적인 방향성이며, 칼만 필터는 선택적인 부가 기능이 아니라 실제 환경에서의 신뢰성을 달성하기 위한 중심 구성 요소이다.

8. 결론 및 향후 연구 방향

8.1 최적 구현을 위한 요약

마커 기반 정밀 착륙 시스템을 성공적으로 개발하기 위한 핵심 사항은 다음과 같다.

  • 정확한 카메라 캘리브레이션을 통해 렌즈 왜곡을 반드시 보정한다.

  • 예상 운용 고도와 환경에 적합한 마커 딕셔너리와 물리적 크기를 신중하게 선택한다.

  • 실시간 이미지 처리를 감당할 수 있는 충분한 성능의 컴패니언 컴퓨터를 사용한다.

  • ROS 기반 소프트웨어 스택을 채택하여 시스템의 모듈성과 확장성을 확보한다.

  • 카메라, 동체, 월드 좌표계 간의 변환 관계를 철저히 검증한다.

  • 칼만 필터를 도입하여 노이즈가 많고 간헐적인 비전 데이터를 안정적인 상태 추정치로 변환한다.

8.2 최신 동향 및 향후 연구

마커 기반 정밀 착륙 기술은 계속해서 발전하고 있으며, 향후 다음과 같은 방향으로 연구가 진행될 것으로 예상된다.

  • 딥러닝 기반 탐지: ArUco/AprilTag과 같은 전통적인 특징점 기반 탐지기에서 벗어나, 복잡하거나 조명이 열악한 환경에서도 뛰어난 강건성을 보이는 YOLO와 같은 딥러닝 기반 탐지기로의 전환이 가속화될 것이다.30

  • 다중 센서 융합: 주야간 운용을 위한 IR 센서 4, 초고속 움직임에 대응하기 위한 이벤트 카메라(event camera), 그리고 정확한 고도 측정 및 장애물 회피를 위한 LiDAR 등 다른 센서와의 긴밀한 융합이 더욱 중요해질 것이다.

  • 완전 자율화를 위한 확장: 정밀 착륙을 위한 독립적인 기능에서 더 나아가, 마커를 SLAM(Simultaneous Localization and Mapping)이나 VIO 시스템의 랜드마크로 활용하여 GPS가 없는 환경에서도 전체 임무 수행이 가능한 항법 시스템의 일부로 통합될 것이다. 이 경우 정밀 착륙은 자율 비행의 마지막 단계가 된다.38

  • 온보드 처리 능력 강화: 더 강력한 성능의 FCU나 전용 AI 가속기의 등장은 현재 컴패니언 컴퓨터가 수행하는 비전 처리 작업의 일부를 다시 FCU 보드로 가져와 시스템의 복잡성과 지연 시간을 줄일 가능성을 열어줄 것이다.

9. 참고 자료

  1. Fiducial Marker-Based Autonomous Landing Using Image Filter and Kalman Filter, https://www.researchgate.net/publication/372779273_Fiducial_Marker-Based_Autonomous_Landing_Using_Image_Filter_and_Kalman_Filter
  2. Precision Landing Using Fiducial Markers - Supernal.aero, https://www.supernal.aero/blog/precision-landing-using-fiducial-markers/
  3. FIDUCIAL MARKER SYSTEMS OVERVIEW AND EMPIRICAL ANALYSIS OF ARUCO, APRILTAG AND CCTAG - UPB, https://www.scientificbulletin.upb.ro/rev_docs_arhiva/full7bc_966141.pdf
  4. A Precision Drone Landing System using Visual and IR Fiducial Markers and a Multi-Payload Camera - arXiv, https://arxiv.org/html/2403.03806v1
  5. RosettaDrone/vision-landing-2: Visual precision landing using multiple AprilTags and a relative defiend landing point - GitHub, https://github.com/RosettaDrone/vision-landing-2
  6. High-Altitude Precision Landing by Smartphone Video Guidance Sensor and Sensor Fusion, https://www.mdpi.com/2504-446X/8/2/37
  7. Precision Landing - IR-LOCK Sensor - PX4 docs, https://docs.px4.io/v1.12/en/advanced_features/precland.html
  8. PX4 Development | PX4 Guide (main) - PX4 docs, https://docs.px4.io/main/en/development/development
  9. PX4 Autopilot User Guide | PX4 Guide (main), https://docs.px4.io/main/en/
  10. Plane documentation - ArduPilot, https://ardupilot.org/plane/
  11. Raspberry Pi Companion with Pixhawk | PX4 Guide (main), https://docs.px4.io/main/en/companion_computer/pixhawk_rpi
  12. Communicating with Raspberry Pi via MAVLink — Dev documentation - ArduPilot, https://ardupilot.org/dev/docs/raspberry-pi-via-mavlink.html
  13. Connect a Raspberry Pi to a Pixhawk running Ardupilot/PX4 - YouTube, https://www.youtube.com/watch?v=cZVNndOaYCE
  14. HSRW-EMRP-WS1920-Drone/object_detection_and_landing - GitHub, https://github.com/HSRW-EMRP-WS1920-Drone/object_detection_and_landing
  15. Visual precision landing - PX4 Autopilot, https://discuss.px4.io/t/visual-precision-landing/2418
  16. Automatic generation and detection of highly reliable fiducial markers under occlusion, https://www.researchgate.net/publication/260251570_Automatic_generation_and_detection_of_highly_reliable_fiducial_markers_under_occlusion
  17. A novel encoding element for robust pose estimation using planar fiducials - Frontiers, https://www.frontiersin.org/journals/robotics-and-ai/articles/10.3389/frobt.2022.838128/full
  18. goodrobots/vision_landing: Precision landing using visual targets - GitHub, https://github.com/goodrobots/vision_landing
  19. OPENCV & C++ TUTORIALS - 161 | Aruco Markers | detectMarkers() - YouTube, https://www.youtube.com/watch?v=RqA-p-pxXRs
  20. PRECISION LANDING | with OPENCV and ARUCO Markers | Part 1 - YouTube, https://www.youtube.com/watch?v=wlT_0fhGrGg
  21. AprilTags vs. ArUco - FIRST - Chief Delphi, https://www.chiefdelphi.com/t/apriltags-vs-aruco/449414
  22. (PDF) A Comparison of Fiducial Markers Pose Estimation for UAVs Indoor Precision Landing - ResearchGate, https://www.researchgate.net/publication/377856920_A_Comparison_of_Fiducial_Markers_Pose_Estimation_for_UAVs_Indoor_Precision_Landing
  23. AprilTag 2: Efficient and robust fiducial detection - WPILib Docs, https://docs.wpilib.org/tr/latest/_downloads/cba1039fecb1731ad4e233f7638b9fd0/wang2016iros.pdf
  24. AprilTag 2: Efficient and robust fiducial detection - Semantic Scholar, https://www.semanticscholar.org/paper/AprilTag-2%3A-Efficient-and-robust-fiducial-detection-Wang-Olson/a0cdee6eabd3b0e179ce60b9639411ca82256423
  25. Precision Landing a Drone on an Aruco Array - YouTube, https://www.youtube.com/watch?v=tJMMEgprBn4
  26. arXiv:2209.14436v1 [cs.RO] 28 Sep 2022, https://arxiv.org/pdf/2209.14436
  27. SlimDeblurGAN-Based Motion Deblurring and Marker Detection for Autonomous Drone Landing - MDPI, https://www.mdpi.com/1424-8220/20/14/3918
  28. How to improve ArUco marker tracking on mp4 video footage - Stack Overflow, https://stackoverflow.com/questions/69154157/how-to-improve-aruco-marker-tracking-on-mp4-video-footage
  29. Dealing with motion blur in ArUco Tracking - Raspberry Pi Forums, https://forums.raspberrypi.com/viewtopic.php?t=338362
  30. YoloTag: Vision-based Robust UAV Navigation with Fiducial Markers - arXiv, https://arxiv.org/html/2409.02334v1
  31. Toward Global Sensing Quality Maximization: A Configuration Optimization Scheme for Camera Networks - arXiv, https://arxiv.org/pdf/2211.15166
  32. Communicating with Raspberry Pi 3b+ - Companion Computers - ArduPilot Discourse, https://discuss.ardupilot.org/t/communicating-with-raspberry-pi-3b/39269
  33. PX4 - UAVLAS Docs, https://docs.uavlas.com/docs/uls-xcopter/integration/px4-integration/
  34. MAVLINK Common Message Set (common.xml), https://mavlink.io/en/messages/common.html
  35. Precision Landing — Dev documentation - ArduPilot, https://ardupilot.org/dev/docs/mavlink-precision-landing.html
  36. Landing Target Protocol - MAVLink Guide, https://mavlink.io/en/services/landing_target.html
  37. New LANDING_TARGET Mavlink Message - Google Groups, https://groups.google.com/g/drones-discuss/c/SDaJjxB86Vw/m/E8F90UwZSRgJ
  38. thien94/vision_to_mavros: A collection of ROS and non-ROS (Python) code that converts data from vision-based system (external localization system like fiducial tags, VIO, SLAM, or depth image) to corresponding mavros topics or MAVLink messages that can be consumed by a flight control stack (with working and tested - GitHub, https://github.com/thien94/vision_to_mavros
  39. Using Vision or Motion Capture Systems for Position Estimation | PX4 Guide (main), https://docs.px4.io/main/en/ros/external_position_estimation
  40. Precision Landing | PX4 Guide (main), https://docs.px4.io/main/en/advanced_features/precland
  41. Precision Landing | PX4 Guide (main), http://docs.px4.io/main/en/advanced_features/precland.html
  42. Precision Landing from Offboard · Issue #14171 · PX4/PX4-Autopilot - GitHub, https://github.com/PX4/Firmware/issues/14171
  43. Precision Landing and Loiter — Copter documentation - ArduPilot, https://ardupilot.org/copter/docs/precision-landing-and-loiter.html
  44. OPTICALLY-GUIDED MULTIROTOR AUTONOMOUS DESCENT AND LANDING ON A MOVING TARGET - ece.ucsb.edu, https://www.ece.ucsb.edu/sites/default/files/2021-11/md-yz-yi-autonomous-landing-itc-2021.pdf
  45. A Step-by-Step Guide to Creating a Robust Autonomous Drone Testing Pipeline - arXiv, https://arxiv.org/html/2506.11400v1
  46. How can i implement precision landing on a drone using Pixhawk and Raspberry Pi?, https://answers.ros.org/question/363798/
  47. DRONE VISUAL LANDING with Aruco and OpenCv | Part 2 - YouTube, https://www.youtube.com/watch?v=iezU2PR0hBk
  48. ArduPilot and Realsense T265 - Precision Landing with AprilTag 3 (ROS) - YouTube, https://www.youtube.com/watch?v=p0hLde1q_U8
  49. Precision landing from ground-based measurements using MAVROS - ArduPilot Discourse, https://discuss.ardupilot.org/t/precision-landing-from-ground-based-measurements-using-mavros/55484
  50. MikeS96/autonomous_landing_uav: ROS packages of the Autonomous landing system of a UAV in Gazebo - GitHub, https://github.com/MikeS96/autonomous_landing_uav
  51. mzahana/mavros_apriltag_tracking: This package implements methods to enable a PX4-powered multi-rotor to track a moving vehicle. - GitHub, https://github.com/mzahana/mavros_apriltag_tracking
  52. Artificial Marker and MEMS IMU-Based Pose Estimation Method to Meet Multirotor UAV Landing Requirements - PubMed Central, https://pmc.ncbi.nlm.nih.gov/articles/PMC6961059/
  53. yudhisteer/UAV-Drone-Object-Tracking-using-Kalman-Filter - GitHub, https://github.com/yudhisteer/UAV-Drone-Object-Tracking-using-Kalman-Filter
  54. Autonomous Drone Landing with Fiducial Markers and a Gimbal-Mounted Camera for Active Tracking - ResearchGate, https://www.researchgate.net/publication/367397996_Autonomous_Drone_Landing_with_Fiducial_Markers_and_a_Gimbal-Mounted_Camera_for_Active_Tracking
  55. A Novel Kalman Filter-Guided Sensor Fusion For Robust UAV Object Tracking in Dynamic Environments - arXiv, https://arxiv.org/html/2410.10409v1
  56. Remote Marker-Based Tracking for UAV Landing Using Visible-Light Camera Sensor - PMC, https://pmc.ncbi.nlm.nih.gov/articles/PMC5621353/
  57. Basics of ARUCO marker | OpenCV | Dronekit | Raspberry pi | Python - YouTube, https://www.youtube.com/watch?v=Y9iYDtLf9rk
  58. Precision AutoLanding — Plane documentation - ArduPilot, https://ardupilot.org/plane/docs/precision-autolanding.html
  59. Precision Landing of a Quadcopter Drone by Smartphone Video Guidance Sensor in a GPS-Denied Environment - PMC, https://pmc.ncbi.nlm.nih.gov/articles/PMC9962314/